const shell = require('shelljs');
const logging = require("./log");
const {Ajax, enu} = require("./Ajax");

// 将shell.exec转换为返回Promise的函数
const execPromise = (cmd) => {
    return new Promise((resolve, reject) => {
        shell.exec(cmd, {silent: true}, (err, stdout, stderr) => {
            if (err) {
                reject(new Error(stderr));
            } else {
                resolve(stdout);
            }
        });
    });
};

/**
 * 此函数事关重大
 * 请勿滥用
 * 责任越大
 * 禁止用于违法，恶意针对服务器
 * 请勿滥用
 * @param header
 * @param order
 * @return {Promise<{msg: *, code: *, data: *}>}
 * @constructor
 */
const System = async (header, order) => {
    // 检查命令是否存在
    if (!shell.which(header)) {
        logging('error', `命令:${header}不存在`);
        return Ajax(enu().msg.system.fail[0], enu().msg.system.fail[2], `命令:${header}不存在`);
    } else {
        try {
            const stdout = await execPromise(`${header} ${order}`);
            logging('info', `命令执行成功: ${stdout}`);
            return Ajax(enu().msg.system.success[0], enu().msg.system.success[1], stdout);
        } catch (err) {
            logging('error', `命令执行失败: ${err}`);
            return Ajax(enu().msg.system.fail[0], enu().msg.system.fail[1], err);
        }
    }
};
module.exports = System;
